AI 监测功能指南

AI 监测功能是基于视觉识别模型的智能安全检测系统,通过上传工作场所图片,自动识别安全风险并生成分析报告。系统支持工地安全检测、区域管理等多种场景。

核心能力

支持图片上传分析、智能风险识别、可视化标注、多级别检测配置等功能

系统介绍

快速开始

模型准备

系统使用视觉模型进行图像分析,推荐使用支持多模态的大语言模型- Qwen-VL 系列,确保具备图像理解和风险识别能力。

使用流程

检测测试界面
  1. 访问 AI 监测页面
  2. 配置检测参数(选择模型、设置安全级别)
  3. 上传工作场所图片(支持 PNG、JPG、WEBP,最大 5MB)
  4. 点击"分析风险"按钮
  5. 查看可视化分析结果
测试图片

点击右上角"测试图片"按钮可下载示例图片进行测试

分析结果

系统返回结构化分析结果,包含:

  • 场景识别 - 判断是否为目标场景(如工地场景)
  • 风险列表 - 识别出的安全隐患及详细描述
  • 风险等级 - HIGH(高风险)/ MEDIUM(中风险)/ LOW(低风险)
  • 位置标注 - 风险区域的坐标信息(矩形或多边形)
  • 控制措施 - 针对每个风险的整改建议

技术架构

前端实现

前端页面位于 pigx-ui-pro/src/views/knowledge/aiSecurity/,采用 Vue 3 Composition API 实现。

核心组件

主页面 (index.vue)

// 分析图片的核心方法
const analyzeImage = async () => {
  const requestParams: AnalyzeImageRequest = {
    imageBase64: uploadedImage.value,
    modelName: Local.get('selectedAiModel:Vision')?.name,
    securityLevel: securityLevel.value,
  }
  const { data } = await analyzeImageApi(requestParams)
  const backendData: BackendAnalysisResult = JSON.parse(data)
  analysisResult.value = backendData
}

ImageVisualizer 组件 (components/ImageVisualizer.vue)

负责图片可视化展示,支持两种模式:

  • 区域标记模式 - 在风险区域绘制矩形/多边形边框
  • 热力图模式 - 使用渐变颜色显示风险密度
// 绘制热力图
const drawHeatmap = () => {
  const ctx = canvas.getContext('2d')
  props.hazards?.forEach(hazard => {
    const region = props.regions?.find(r => r.id === hazard.id)
    const centerX = (region.x + region.w / 2) * imageWidth.value
    const centerY = (region.y + region.h / 2) * imageHeight.value
    const gradient = ctx.createRadialGradient(/* ... */)
    // 根据风险等级设置颜色
    ctx.fillStyle = gradient
    ctx.fill()
  })
}

AnalysisResults 组件 (components/AnalysisResults.vue)

展示分析结果列表,支持:

  • 风险项折叠展开
  • 鼠标悬停高亮对应区域
  • 按风险等级筛选
  • 统计各等级风险数量

API 接口定义

// src/api/knowledge/aiSecurity.ts
export interface AnalyzeImageRequest {
  imageBase64?: string  // Base64 编码的图片
  modelName: string     // 模型名称
  securityLevel?: string // 安全级别 1-低 3-中 5-高
}

export interface BackendAnalysisResult {
  caption: string                // 图像描述
  isConstructionScene: boolean   // 是否工地场景
  hazards: Array<{
    id: string                   // 风险ID H1, H2...
    hazard: string               // 风险描述
    risk: {
      severity: 'HIGH' | 'MEDIUM' | 'LOW'
      reason: string             // 风险原因
    }
    decide_controls: string[]    // 控制措施
  }>
  regions: Array<{
    id: string                   // 对应风险ID
    shape: 'rect' | 'poly'       // 形状类型
    x?: number, y?: number       // 矩形左上角坐标(0-1)
    w?: number, h?: number       // 矩形宽高(0-1)
    points?: number[][]          // 多边形顶点坐标
  }>
}

后端实现

后端服务位于 pigx-knowledge 模块,核心流程如下。

请求处理流程

graph LR
  A[前端上传图片] --> B[AiCompletionsController]
  B --> C[AiCompletionsService]
  C --> D[PromptBuilder渲染提示词]
  D --> E[构建多模态消息]
  E --> F[调用视觉模型]
  F --> G[JSONRepairUtil修复JSON]
  G --> H[返回结构化结果]

核心代码

控制器 (AiCompletionsController.java)

@PostMapping("/image/analyze")
public R analyzeImage(@RequestBody AiImageVisionDTO imageVisionDTO) {
  return completionsService.visionAnalyze(imageVisionDTO);
}

服务层 (AiCompletionsServiceImpl.java)

public R visionAnalyze(AiImageVisionDTO imageVisionDTO) {
  // 获取视觉模型
  ChatModel chatModel = modelProvider.getAiVisionAssistant().getKey();

  // 构建系统消息
  SystemMessage systemMessage = SystemMessage.from(
    PromptBuilder.render(OCR_IMAGE_SECURITY_SYSTEM)
  );

  // 构建用户消息(图片 + 文本)
  UserMessage imageMessage = UserMessage.from(
    ImageContent.from(imageVisionDTO.getImageBase64()),
    TextContent.from(
      PromptBuilder.render(OCR_IMAGE_SECURITY_USER,
        Map.of("securityLevel", imageVisionDTO.getSecurityLevel())
      ) + PromptBuilder.render(OCR_IMAGE_SECURITY_USER_SCHEMA)
    )
  );

  // 调用模型
  ChatResponse response = chatModel.chat(systemMessage, imageMessage);

  // 修复并返回 JSON
  return R.ok(JSONRepairUtil.repair(response.aiMessage().text()));
}
JSON 修复

由于大模型返回的 JSON 可能格式不规范,系统使用 JSONRepairUtil 自动修复格式错误

进阶配置

安全级别调整

安全级别控制检测的严格程度,通过 securityLevel 参数配置:

级别说明
1宽松检测,识别最高风险的1个问题
3标准检测,识别最高风险的3个问题
5严格检测,识别最高风险的5个问题

自定义检测场景

通过修改提示词模板,可以将系统应用到不同场景。

示例:停车违章检测

修改用户提示词:

请分析图像中的停车违章行为: 1. 车辆是否压线停放 2. 是否占用消防通道 3. 是否停在禁停区域 4. 车牌是否清晰可见 识别风险程度最高的{securityLevel}个违章行为...

示例:食品安全检测

修改用户提示词:

请分析厨房环境的食品安全风险: 1. 工作人员是否佩戴口罩、手套 2. 厨房环境是否整洁 3. 食材存放是否规范 4. 消毒设备是否到位 识别风险程度最高的{securityLevel}个安全隐患...
提示词修改注意事项

修改提示词时,必须保持 JSON Schema 的输出格式一致,否则前端无法正确解析结果